/**
 * 
 */
package mx.frantor.catalogos.bussines;

import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;

import org.hibernate.Session;
import org.hibernate.ejb.criteria.expression.function.CurrentDateFunction;
import org.hibernate.mapping.Array;

import flex.messaging.io.ArrayCollection;

import mx.frantor.catalogos.dao.DetallePedidoDAO;
import mx.frantor.catalogos.dao.OrdenDeProduccionDAO;
import mx.frantor.catalogos.dao.ProductosExistenciaDAO;
import mx.frantor.catalogos.dao.RemMatPDAO;
import mx.frantor.catalogos.daoimp.DetallePedidoDAOImpl;
import mx.frantor.catalogos.daoimp.OrdenDeProduccionDAOImpl;
import mx.frantor.catalogos.daoimp.ProductosExistenciaDAOImpl;
import mx.frantor.catalogos.daoimp.RemMPDAOImpl;
import mx.frantor.catalogos.entitys.CatalogoProductoEntity;
import mx.frantor.catalogos.entitys.DetallePedidoEntity;
import mx.frantor.catalogos.entitys.MateriaPrimaExistenciasEntity;
import mx.frantor.catalogos.entitys.OrdenDeProduccionEntity;
import mx.frantor.catalogos.entitys.PedidosEntity;
import mx.frantor.catalogos.entitys.ProductosExistenciasEntity;
import mx.frantor.catalogos.entitys.RemMPEntity;
import mx.frantor.util.HibernateUtil;

/**
 * @author Hp
 *
 */
public class RemMatBussines {
	
	private RemMatPDAO cliDAO = new RemMPDAOImpl();
	private OrdenDeProduccionDAO ordProdDAO = new OrdenDeProduccionDAOImpl();
	private DetallePedidoDAO detpedDAO = new DetallePedidoDAOImpl();
	private RemMatPDAO remDAO = new RemMPDAOImpl();
	private DetallePedidoBussines detPedidoBuss = new DetallePedidoBussines();
	private CatalogoProductoBussines catProdBuss = new CatalogoProductoBussines();
	private MateriaPrimaExistenciasBussines matPrimaBuss = new MateriaPrimaExistenciasBussines();
	private ProductosExistenciaBussines prodBuss = new ProductosExistenciaBussines();
	public String res;
	
		public String cambiarEstatus(long idDetPed, String estatus){
			String res="";
			cliDAO.cambiaEstatus(idDetPed, estatus);
			return res;
		}
		public String modificarProductosExistencias(
				ProductosExistenciasEntity modificarUsuario) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public String modificarProductosCantidad(Long idProductosExistencias,
				Integer cantidad) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public List<ProductosExistenciasEntity> getTodosProductosExistenciasActivos() {
			// TODO Auto-generated method stub
			return null;
		}
		
		public ProductosExistenciasEntity getProductossPorClave(String clave) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public List<ProductosExistenciasEntity> getProductosExistenciasPorId(
				Long idProductosExistencias) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public ProductosExistenciasEntity getProductosExistenciasId(
				Long idProductosExistencias) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public String eliminarProductosExistencias(Long idProductosExistencias) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public String agregarProductosExistencias(
				ProductosExistenciasEntity nuevoUsuario) {
			// TODO Auto-generated method stub
			return null;
		}
		
		public String agregarProductosExistencia(
				ProductosExistenciasEntity nuevoProd, ArrayCollection catProds) {
			// TODO Auto-generated method stub
			return null;
		}
		
	
	public String AgregarReemplazoOrd(Long idDetallePedido, int cantidad){ 
		DetallePedidoEntity detE = detPedidoBuss.getDetallePedidoId(idDetallePedido);
		System.out.println("Id Prod Pedido " + detE.getIdProducto());
		String flag="n";
		res="";
		if(detE.getIdProducto()!=null){
		List<CatalogoProductoEntity> lstCatProd = catProdBuss.getCatalogoPPorIdProducto(detE.getIdProducto());
		for(CatalogoProductoEntity catProdE:lstCatProd){
			System.out.println("Prods" );
			if(catProdE.getIdMateria()!=0 && catProdE.getIdMateria()!= null ){
				if(cantidad<=0){
				MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(catProdE.getIdMateria());
				if(matPrimaE.getCantidad()>=detE.getCantidad() * catProdE.getCantidad()){
					if(res!=null){
						res = res + idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + matPrimaE.getNombre() + "," + "null"+ "," + matPrimaE.getIdMateria() + ",0,SI,null,!"   ;
					}else{
						res = idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + matPrimaE.getNombre() + "," + "null" + "," + matPrimaE.getIdMateria() + ",0,SI,null,!"   ;
					}
					
					flag="s";					
				}
				else{
					flag="n";
					float f=cantidad * catProdE.getCantidad()-matPrimaE.getCantidad();
					//res=matPrimaE.getNombre() + "," + f +  detE.getCantidad() + "," + detE.getIdMateria();
					if(res!=null){
						res = res + idDetallePedido.toString() + "," + matPrimaE.getCantidad().toString()  + "," + matPrimaE.getNombre() + ",null," + matPrimaE.getIdMateria() + "," + f + ",NO,null,!" ;
					}else{
						res = idDetallePedido.toString() + "," + matPrimaE.getCantidad().toString()  + "," + matPrimaE.getNombre() + ",null," + matPrimaE.getIdMateria() + "," + f + ",NO,null,!" ;
					}
					
				}
				}
				else{
					MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(catProdE.getIdMateria());
					if(matPrimaE.getCantidad()>=cantidad * catProdE.getCantidad()){
						if(res!=null){
							res = res + idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + matPrimaE.getNombre() + "," + "null"+ "," + matPrimaE.getIdMateria() + ",0,SI,null,!"   ;
						}else{
							res = idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + matPrimaE.getNombre() + "," + "null" + "," + matPrimaE.getIdMateria() + ",0,SI,null,!"   ;
						}
						
						flag="s";					
					}
					else{
						flag="n";
						float f=cantidad * catProdE.getCantidad()-matPrimaE.getCantidad();
						//res=matPrimaE.getNombre() + "," + f +  detE.getCantidad() + "," + detE.getIdMateria();
						if(res!=null){
							res = res + idDetallePedido.toString() + "," + matPrimaE.getCantidad().toString()  + "," + matPrimaE.getNombre() + ",null," + matPrimaE.getIdMateria() + "," + f + ",NO,null,!" ;
						}else{
							res = idDetallePedido.toString() + "," + matPrimaE.getCantidad().toString()  + "," + matPrimaE.getNombre() + ",null," + matPrimaE.getIdMateria() + "," + f + ",NO,null,!" ;
						}
						
					}
				}
			}
			
			if(catProdE.getIdRefaccion()!=0 && catProdE.getIdRefaccion()!= null){
				if(cantidad > 0){
					ProductosExistenciasEntity prodsE = prodBuss.getProductoExistenciaPorId(catProdE.getIdRefaccion());
					
					if(prodsE.getCantidad()>=cantidad * catProdE.getCantidad()){
						if(res!=null){
							res = res + idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + prodsE.getNombre() + ",null,null,0,SI,"+catProdE.getIdRefaccion()+",!"   ;
						}else{
							res = idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + prodsE.getNombre() + ",null,null,0,SI,"+catProdE.getIdRefaccion()+",!"   ;
						}
						
						flag="s";
					}
					else{
						flag="n";
						float f=cantidad * catProdE.getCantidad()-prodsE.getCantidad();
						//res=prodsE.getNombre()+ "," + f +  detE.getCantidad() + "," + detE.getIdMateria();
						System.out.println(res);
						if(res!=null){
							res = res + idDetallePedido.toString() + "," + prodsE.getCantidad().toString() +","+ catProdE.getNombre() + ",null,null,"+ f + ",NO,"+catProdE.getIdRefaccion()+",!";
						}else{
							res = idDetallePedido.toString() + "," + cantidad +","+ catProdE.getNombre() + ",null,null,"+ f + ",NO,"+catProdE.getIdRefaccion()+",!";
						}
						
						//prodBuss.ModificarProductoExistenciaDirecto(prodsE);
					}
				
				}
				else{
				ProductosExistenciasEntity prodsE = prodBuss.getProductoExistenciaPorId(catProdE.getIdRefaccion());
				
				if(prodsE.getCantidad()>=detE.getCantidad() * catProdE.getCantidad()){
					if(res!=null){
						res = res + idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + prodsE.getNombre() + ",null,null,0,SI,"+catProdE.getIdRefaccion()+",!"   ;
					}else{
						res = idDetallePedido.toString() + "," + catProdE.getCantidad().toString()  + "," + prodsE.getNombre() + ",null,null,0,SI,"+catProdE.getIdRefaccion()+",!"   ;
					}
					
					flag="s";
				}
				else{
					flag="n";
					float f=detE.getCantidad() * catProdE.getCantidad()-prodsE.getCantidad();
					//res=prodsE.getNombre()+ "," + f +  detE.getCantidad() + "," + detE.getIdMateria();
					System.out.println(res);
					if(res!=null){
						res = res + idDetallePedido.toString() + "," + prodsE.getCantidad().toString() +","+ catProdE.getNombre() + ",null,null,"+ f + ",NO,"+catProdE.getIdRefaccion()+",!";
					}else{
						res = idDetallePedido.toString() + "," + prodsE.getCantidad().toString() +","+ catProdE.getNombre() + ",null,null,"+ f + ",NO,"+catProdE.getIdRefaccion()+",!";
					}
					
					//prodBuss.ModificarProductoExistenciaDirecto(prodsE);
				}
			}
			}
		}
		for(CatalogoProductoEntity catProdEc:lstCatProd){
		/*	if (flag=="s" && detE.getExcepcionfaltanes()==false){
				if(catProdEc.getIdMateria()!=0 && catProdEc.getIdMateria()!= null ){
					MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(catProdEc.getIdMateria());
				
					Float cant = matPrimaE.getCantidad() - (detE.getCantidad() * catProdEc.getCantidad());
					matPrimaE.setCantidad(Float.valueOf(String.valueOf(cant)));
					matPrimaBuss.modificarMateriaPrimaExistenciasDirecto(matPrimaE);
					System.out.println("MAteria Prima");
					}								
				if(catProdEc.getIdRefaccion()!=0 && catProdEc.getIdRefaccion()!= null){
				ProductosExistenciasEntity prodsE = prodBuss.getProductoExistenciaPorId(catProdEc.getIdRefaccion());
						Float cant = prodsE.getCantidad() - (detE.getCantidad() * catProdEc.getCantidad());
						prodsE.setCantidad(cant);
						System.out.println("cantidad");
						prodBuss.ModificarProductoExistenciaDirecto(prodsE);
						System.out.println("Refacciones");
				}
			}*/
		}
		}else{
			MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(detE.getIdMateria());
				System.out.println("MateriaPrima"+ detE.getIdMateria());
				if(matPrimaE.getCantidad() >= detE.getCantidad()){
					flag="s";
				}
				else{
					flag="n";
					float f = detE.getCantidad()-matPrimaE.getCantidad();
					if(res!=null){
						res = res + idDetallePedido.toString() + "," + matPrimaE.getCantidad().toString()+ "," + matPrimaE.getNombre() + ","  + detE.getIdProducto()+ "," + detE.getIdMateria() + "," + f + ",NO,null,!";
					}else{
						res = idDetallePedido.toString() + "," + matPrimaE.getCantidad().toString()+ "," + matPrimaE.getNombre() + ","  + detE.getIdProducto()+ "," + detE.getIdMateria() + "," + f + ",NO,null,!";
					}
					
					
					//return res;					
  			}
				//MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(detE.getIdMateria());
			

		}
		detPedidoBuss.enviarAProduccion(idDetallePedido, cantidad, null, null);
			System.out.println(res);
			
			return res;
		
	
	}
	public String AgregarReemplazo(Long idDetallePedido,  ArrayCollection catProds){
		System.out.println(idDetallePedido);
		String errRslt = remDAO.agregarRemMP(idDetallePedido, catProds);
		DescontarMp(idDetallePedido);
		
		OrdenDeProduccionEntity ordProdE = new OrdenDeProduccionEntity();
		Date fecha = new Date();
		ordProdE.setFecha(fecha);
		ordProdE.setProcede(true);
		ordProdE.setIdDetallePedido(idDetallePedido);
		ordProdE.setEstatus("NUEVO");
		System.out.println("llega");
		errRslt = ordProdDAO.agregarOrdenDeProduccio(ordProdE);
		System.out.println("agregaORD correcto " + errRslt );
		
				return errRslt;
	
		
	}
	
	public void dentenerOrd (Long idDetellaPedido, int cantidad){
		DetallePedidoEntity pedcant = detpedDAO.getDetallePedidoId(idDetellaPedido);
		float cantped = pedcant.getCantidad();
		boolean reem = pedcant.getExcepcionfaltanes();
		if(reem){
			List<RemMPEntity> RemMat = cliDAO.getRemMPPorId(idDetellaPedido);
			if(idDetellaPedido!=null){
				System.out.println("Entra Descuento");
				System.out.println(RemMat.size());
				for(RemMPEntity catMPR:RemMat){
					System.out.println("id MP " +  catMPR.getIdMateria() + " REfa "+ catMPR.getIdRefaccion());
					if(catMPR.getIdMateria()!=null && catMPR.getIdMateria()>0){
						System.out.println("MP");
						MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(catMPR.getIdMateria());
					
						Float cant = matPrimaE.getCantidad() + ((catMPR.getCantidad()/cantped)*cantidad);
						matPrimaE.setCantidad(cant);
						System.out.println("cantidad " + cant);
						matPrimaBuss.modificarMateriaPrimaExistenciasDirecto(matPrimaE);
						System.out.println("DESC MP");
					}
					if(catMPR.getIdRefaccion()!= null && catMPR.getIdRefaccion() > 0){
						System.out.println("Refacciones");
						ProductosExistenciasEntity prodsE = prodBuss.getProductoExistenciaPorId(catMPR.getIdRefaccion());
						Float cant = prodsE.getCantidad() + ((catMPR.getCantidad()/cantped)*cantidad);
						prodsE.setCantidad(cant);
						System.out.println("cantidad " + cant );
						prodBuss.ModificarProductoExistenciaDirecto(prodsE);
						System.out.println("DESC REFA");
					}
				}
			}
	
		}else{
			List<CatalogoProductoEntity> lstCatProd = catProdBuss.getCatalogoPPorIdProducto(pedcant.getIdProducto());
			for(CatalogoProductoEntity catProdEc:lstCatProd){
				if(catProdEc.getIdMateria()!=0 && catProdEc.getIdMateria()!= null ){
					MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(catProdEc.getIdMateria());
					
					Float cant = matPrimaE.getCantidad() + (catProdEc.getCantidad() * cantidad);
					matPrimaE.setCantidad(Float.valueOf(String.valueOf(cant)));
					matPrimaBuss.modificarMateriaPrimaExistenciasDirecto(matPrimaE);
					System.out.println("MAteria Prima");
				}								
				if(catProdEc.getIdRefaccion()!=0 && catProdEc.getIdRefaccion()!= null){
					ProductosExistenciasEntity prodsE = prodBuss.getProductoExistenciaPorId(catProdEc.getIdRefaccion());
					Float cant = prodsE.getCantidad() + (cantidad * catProdEc.getCantidad());
					prodsE.setCantidad(cant);
					System.out.println("cantidad");
					prodBuss.ModificarProductoExistenciaDirecto(prodsE);
					System.out.println("Refacciones");
				}
			}
			
		}
	}
	public void DescontarMp (Long idDetellaPedido){
		List<RemMPEntity> RemMat = cliDAO.getRemMPPorId(idDetellaPedido);
		if(idDetellaPedido!=null){
			System.out.println("Entra Descuento");
			System.out.println(RemMat.size());
			for(RemMPEntity catMPR:RemMat){
				System.out.println("id MP " +  catMPR.getIdMateria() + " REfa "+ catMPR.getIdRefaccion());
				if(catMPR.getIdMateria()!=null && catMPR.getIdMateria()>0){
					System.out.println("MP");
					MateriaPrimaExistenciasEntity matPrimaE = matPrimaBuss.getMateriaPrimaExistenciasId(catMPR.getIdMateria());
					
					Float cant = matPrimaE.getCantidad() - (catMPR.getCantidad());
					matPrimaE.setCantidad(cant);
					System.out.println("cantidad " + cant);
					matPrimaBuss.modificarMateriaPrimaExistenciasDirecto(matPrimaE);
					System.out.println("DESC MP");
				}
				if(catMPR.getIdRefaccion()!= null && catMPR.getIdRefaccion() > 0){
					System.out.println("Refacciones");
					ProductosExistenciasEntity prodsE = prodBuss.getProductoExistenciaPorId(catMPR.getIdRefaccion());
							Float cant = prodsE.getCantidad() - (catMPR.getCantidad());
							prodsE.setCantidad(cant);
							System.out.println("cantidad " + cant );
							prodBuss.ModificarProductoExistenciaDirecto(prodsE);
							System.out.println("DESC REFA");
					}

			}
		}
	
		
	}
	
}
